// msg_queue_sender.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <sys/stat.h>
#include <fcntl.h>

#define KEY_FILE "/tmp/msg_key_file" // 用于生成键值的文件
#define MSG_KEY 1234

typedef struct {
    long mtype;
    char mtext[256];
} Message;

int main() {
    // 确保KEY_FILE存在
    FILE *file = fopen(KEY_FILE, "w");
    if (file == NULL) {
        perror("fopen");
        exit(1);
    }
    fclose(file);

    key_t key = ftok(KEY_FILE, MSG_KEY); // 使用ftok生成键值
    if (key == -1) {
        perror("ftok");
        exit(1);
    }

    int msgid = msgget(key, IPC_CREAT | 0666); // 创建消息队列
    if (msgid == -1) {
        perror("msgget");
        exit(1);
    }

    Message msg;
    msg.mtype = 1;
    strcpy(msg.mtext, "Hello from sender");

    if (msgsnd(msgid, &msg, sizeof(msg.mtext), 0) == -1) {
        perror("msgsnd");
        exit(1);
    }

    msgctl(msgid, IPC_RMID, NULL); // 删除消息队列
    return 0;
}


